package qc.module.duty.service;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import qc.common.core.unify.QCUnifyReturnValue;
import qc.module.duty.dto.staff.DutyStaffDto;
import qc.module.duty.entity.DutyStaff;
import qc.module.duty.mapper.DutyStaffMapper;
import qc.module.duty.repository.DutyStaffRepository;

import java.util.List;

@Service
public class DutyStaffService {

    private DutyStaffRepository dutyStaffRepository;

    @Autowired
    public void setDutyStaffRepository(DutyStaffRepository dutyStaffRepository) {
        this.dutyStaffRepository = dutyStaffRepository;
    }

    /**
     * 根据人员id获取值班人员信息
     *
     * @param id: 人员id
     * @return DutyStaffDto 返回信息
     * @author QcCheng Tech
     * @date 2023/8/10
     */
    public DutyStaffDto get(int id) {
        // 根据id查询DutyStaff对象
        DutyStaff dutyStaff = dutyStaffRepository.selectById(id);

        // 如果查询结果不为空，进行对象转换并返回DutyStaffDto对象
        if (dutyStaff != null) {
            return DutyStaffMapper.MAPPER.toDto(dutyStaff);
        }

        return null;
    }

    /***
     * 获取所有值班人员信息
     *
     * @return java.util.List<qc.module.duty.dto.staff.DutyStaffDto>
     * @author QuCheng Tech
     * @since 2023/8/11
     */
    public List<DutyStaffDto> getAllStaffs() {
        LambdaQueryWrapper<DutyStaff> wrapper = new LambdaQueryWrapper<>();
        wrapper.orderByAsc(DutyStaff::getName);

        List<DutyStaff> ens = dutyStaffRepository.selectList(wrapper);
        if (ens != null && ens.size() > 0x0)
            return DutyStaffMapper.MAPPER.toDtoList(ens);

        return null;
    }

    /***
     * 获取指定部门ID的值班人员信息
     *
     * @param deptId 部门ID
     * @return java.util.List<qc.module.duty.dto.staff.DutyStaffDto>
     * @author QuCheng Tech
     * @since 2023/8/11
     */
    public List<DutyStaffDto> getDeptStaffs(int deptId) {
        LambdaQueryWrapper<DutyStaff> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(DutyStaff::getDept, deptId);
        wrapper.orderByAsc(DutyStaff::getName);

        List<DutyStaff> ens = dutyStaffRepository.selectList(wrapper);
        if (ens != null && ens.size() > 0x0)
            return DutyStaffMapper.MAPPER.toDtoList(ens);

        return null;
    }

    /**
     * 新增值班人员
     *
     * @param dutyStaffDto:值班人员信息
     * @return String 成功返回null，失败返回错误信息
     * @author QcCheng Tech
     * @date 2023/8/21
     */

    public String add(DutyStaffDto dutyStaffDto) {
        if (dutyStaffDto == null) {
            return QCUnifyReturnValue.Warn("传入的用户信息为空");
        }
        if (StringUtils.isBlank(dutyStaffDto.getName())) {
            return QCUnifyReturnValue.Warn("值班人员姓名不能为空");

        }
        if (dutyStaffDto.getDept() < 1) {
            return QCUnifyReturnValue.Warn("值班人员部门不能为空");
        }

        if (StringUtils.isBlank(dutyStaffDto.getPhone())) {
            return QCUnifyReturnValue.Warn("值班人员手机号不能为空");
        }
        //if (StringUtils.isBlank(dutyStaffDto.getCornet())) {
        //    return QCUnifyReturnValue.Warn("值班人员短号不能为空");
        //}

        DutyStaff dutyStaff = DutyStaffMapper.MAPPER.toEntity(dutyStaffDto);
        //自动生成值班人员id
        dutyStaff.setId(generateId());


        if (dutyStaffRepository.insert(dutyStaff) < 1) {
            return QCUnifyReturnValue.Warn("值班人员添加失败");
        }


        return QCUnifyReturnValue.Success();
    }


    /**
     * 删除值班人员
     *
     * @param id:删除人员id
     * @return String 成功返回null，失败返回错误信息
     * @author QcCheng Tech
     * @date 2023/8/21
     */
    public String delete(int id) {
        if (dutyStaffRepository.deleteById(id) < 1) {
            return QCUnifyReturnValue.Warn("删除人员失败");
        }
        return QCUnifyReturnValue.Success();
    }


    /**
     * 修改值班人员信息
     *
     * @param dutyStaffDto:修改信息
     * @return String 成功返回null，失败返回错误信息
     * @author QcCheng Tech
     * @date 2023/8/21
     */
    public String update(DutyStaffDto dutyStaffDto) {
        if (dutyStaffDto == null) {
            return QCUnifyReturnValue.Warn("传入的用户信息为空");
        }
        if (StringUtils.isBlank(dutyStaffDto.getName())) {
            return QCUnifyReturnValue.Warn("值班人员姓名不能为空");

        }
        if (dutyStaffDto.getDept() < 1) {
            return QCUnifyReturnValue.Warn("值班人员部门不能为空");
        }

        if (StringUtils.isBlank(dutyStaffDto.getPhone())) {
            return QCUnifyReturnValue.Warn("值班人员手机号不能为空");
        }
        if (StringUtils.isBlank(dutyStaffDto.getCornet())) {
            return QCUnifyReturnValue.Warn("值班人员短号不能为空");
        }

        DutyStaff dutyStaff = DutyStaffMapper.MAPPER.toEntity(dutyStaffDto);
        int i = dutyStaffRepository.updateById(dutyStaff);
        if (i < 1) {
            return QCUnifyReturnValue.Warn("人员信息更新失败");
        }

        return QCUnifyReturnValue.Success();

    }

    /**
     * 生成用户ID，获取数据库表中的最大记录ID+1
     *
     * @return 生成用户ID
     * @author QuCheng Tech
     * @since 2023/5/25
     */
    Integer generateId() {
        Integer maxRecordId = getMaxId();
        return maxRecordId + 1;
    }


    /**
     * 获取数据库表中的最大ID值，没有记录时返回0
     *
     * @return 返回数据库表中的最大ID值
     * @author QuCheng Tech
     * @since 2023/5/25
     */
    Integer getMaxId() {
        LambdaQueryWrapper<DutyStaff> wrapper = new LambdaQueryWrapper<>();
        wrapper.select(DutyStaff::getId);
        wrapper.orderByDesc(DutyStaff::getId);
        DutyStaff en = dutyStaffRepository.selectOne(wrapper);
        if (en != null) return en.getId();

        return 0x0;
    }
}